#include <REGX52.H>
#include "Delay.h"

/////////////////////////////////////////////////////////////////
//                    欲使用此PRO版                            //
//               需使用定时器(控制为2ms)                       //
/////////////////////////////////////////////////////////////////

//数码管显示缓存区
unsigned char NiXie_Buf[9] = {0,10,10,10,10,10,10,10,10};
//下标0对应0，因为i从1开始，不会调用下标0

//数码管段码表
NixieTable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};
//下标正好对应数字0~9，下标10对应空，下标11对应'-'

/**************************************************************************************/

/**
  * @brief   设置显示缓存区
  * @param   Location 要设置的位置，范围：1~8  
  * @param   Number 要设置的数字，范围：段码表索引范围 
  * @retval  无
  */
void NiXie(unsigned char Location,Number)
{
	NiXie_Buf[Location] = Number;
}

/**************************************************************************************/

/**
  * @brief   数码管扫描显示
  * @param   Location 显示的位置（从左向右1~8）
  * @param   Number 要显示的数字，范围：段码表索引范围
  * @retval  无
  */
void NiXie_Scan(unsigned char Location,Number)
{
	P2=0x00; 		 //段码清0，消影
	switch(Location) //位码输出
	{
		case 1:P2_4=1;P2_3=1;P2_2=1;break;
		case 2:P2_4=1;P2_3=1;P2_2=0;break;
		case 3:P2_4=1;P2_3=0;P2_2=1;break;
		case 4:P2_4=1;P2_3=0;P2_2=0;break;
		case 5:P2_4=0;P2_3=1;P2_2=1;break;
		case 6:P2_4=0;P2_3=1;P2_2=0;break;
		case 7:P2_4=0;P2_3=0;P2_2=1;break;
		case 8:P2_4=0;P2_3=0;P2_2=0;break;
	}
	P0=NixieTable[Number]; //段码输出
}

/**************************************************************************************/

/**
  * @brief   数码管驱动函数，在 中断 中调用
  * @param   无
  * @retval  无
  */
void NiXie_Loop()
{
	static unsigned char i = 1;	//从1开始是为了方便定位数码管位置，免得再重新定义一个变量
	NiXie_Scan(i,NiXie_Buf[i]);	//让数码管显示为空
	i++;	//计次
	if (i > 8)	//判断
	{
		i = 1;	//归1，防止数组越界
	}
}

/**************************************************************************************/



































